package webservices;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import BaseDatos.BaseDatos;
import BaseDatos.Utils;
import BaseDatos.Validadores;
import Objetos.Atiende;
import Objetos.Cliente;
import Objetos.EstadoCliente;
import Objetos.Sesion;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.naming.NamingException;
/**
 * 
 * @author ARMGARCES
 */
@WebService(serviceName = "Cliente",
            targetNamespace = "http://digamaracay3.dynalias.com:8080/WSS/Cliente")
public class Clientes {
    private final String target = "http://digamaracay3.dynalias.com:8080/WSS/Cliente";
    private static BaseDatos bd;
    /**
     * Obtiene un objeto EstadoCliente a partir de su codigo.
     * Recibe una variable tipo Integer y retorna un objeto tipo EstadoCliente
     * @param codigo Variable tipo Integer distinta a 0.
     * @return objeto tipo EstadCliente con los parametros del cliente seteados.
     */
    @WebMethod(operationName = "getEstadoCliente")
    public EstadoCliente getEstadoCliente(@WebParam(name = "codigo",
                                            targetNamespace = target) int codigo){
        //TODO write your implementation code here:
        EstadoCliente cliente = this.getEstadoCliente(codigo);
        return cliente; 
    }
    /**
     * Obtiene un ArrayList de clientes a partir del id de usuario.
     * Recibe una variable tipo Integer. 
     * @param user Variable tipo Integer distinta a 0.
     * @return Retorna un objeto tipo Array con los clientes encontrados para el user recibido.
     * En caso de no arrojar resultados, retorna nul
     */
    @WebMethod(operationName = "getClientes")
    public ArrayList getClientes(@WebParam(name = "user",
                                        targetNamespace = target) int user){
        //TODO write your implementation code here: 
        String v = Validadores.getCodVendedor(user);
        if(!v.equals("Error")){
            ArrayList clientes = this.obtenerClientes(v.substring(0,1),v.substring(1));
            return clientes;
        }
        return null;
    }

    /**
     * Obtiene un ArrayList de EstadoCliente a partir de la zona y ruta.
     * Recibe dos variables de cadena.
     * Retorna un Array de objetos EstadoCliente
     * @param _zona Variable tipo cadena distinta a null o a cadena de espacios. 
     * @param _ruta Variable tipo cadena distinta a null o a cadena de espacios. 
     * @return Objeto tipo Array que contiene una lista de objetos tipo EstadoCliente.
     */
    public static ArrayList obtenerClientes(String _zona,String _ruta){
        ArrayList resp = new ArrayList();
        if (!_zona.trim().equals("") || _zona!=null || !_ruta.trim().equals("") || _ruta!=null){
            try{
                Connection conn = BaseDatos.getFoxPro().getConnection();
                String sql = "CALL FoxPro.getClientes('"+_zona+"','"+_ruta+"');";
                PreparedStatement ps = conn.prepareStatement(sql);
                ResultSet result     = ps.executeQuery();
                int i=0;
                while(result.next()){
                    i++;
                    EstadoCliente cliente = new EstadoCliente();
                    cliente.setId(         result.getInt("idCliente"));
                    cliente.setCodigo(     result.getInt("codigo"));
                    cliente.setNombre(     result.getString("nombre"));
                    cliente.setRif(        result.getString("rif"));
                    cliente.setCiudad(     result.getString("ciudad"));
                    cliente.setZona(       result.getString("zona"));
                    cliente.setNdevo(      result.getInt("ndevo"));
                    cliente.setMdevo(      result.getDouble("mdevo"));
                    cliente.setN15(        result.getInt("n15"));
                    cliente.setM15(        result.getDouble("m15"));
                    cliente.setN30(        result.getInt("n30"));
                    cliente.setM30(        result.getDouble("m30"));
                    cliente.setN45(        result.getInt("n45"));
                    cliente.setM45(        result.getDouble("m45"));
                    cliente.setN60(        result.getInt("n60"));
                    cliente.setM60(        result.getDouble("m60"));
                    cliente.setN90(        result.getInt("n90"));
                    cliente.setM90(        result.getDouble("m90"));
                    cliente.setN120(       result.getInt("n120"));
                    cliente.setM120(       result.getDouble("m120"));
                    cliente.setN121(       result.getInt("n121"));
                    cliente.setM121(       result.getDouble("m121"));
                    resp.add(cliente);
                    System.out.println("cliente = " + cliente);
                }            
            }catch(NamingException nex){
                nex.printStackTrace();
            }catch(SQLException sqlex){
                sqlex.printStackTrace();
            }
        }
        else{
            System.out.println("Rellene todos los campos");
            return null;
        }
        return resp;
    }

}
